#pragma once

#include "Blending.h"
#include "ColorMask.h"
#include "DepthRange.h"
#include "DepthTest.h"
#include "FacetCulling.h"
#include "PrimitiveRestart.h"
#include "ScissorTest.h"
#include "StencilTest.h"

namespace Renderer
{
	enum class ProgramPointSize
	{
		Enabled,
		Disabled
	};

	enum class RasterizationMode
	{
		Point,
		Line,
		Fill
	};

	class RenderState
	{
	public:
		RenderState()
		{
			PrimitiveRestart = Renderer::PrimitiveRestart();
			FacetCulling = Renderer::FacetCulling();
			ProgramPointSize = Renderer::ProgramPointSize::Disabled;
			RasterizationMode = Renderer::RasterizationMode::Fill;
			ScissorTest = Renderer::ScissorTest();
			StencilTest = Renderer::StencilTest();
			DepthTest = Renderer::DepthTest();
			DepthRange = Renderer::DepthRange();
			Blending = Renderer::Blending();
			ColorMask = Renderer::ColorMask(true, true, true, true);
			DepthMask = true;
		}

		~RenderState()
		{
		}

		Renderer::PrimitiveRestart PrimitiveRestart;
		Renderer::FacetCulling FacetCulling;
		Renderer::ProgramPointSize ProgramPointSize;
		Renderer::RasterizationMode RasterizationMode;
		Renderer::ScissorTest ScissorTest;
		Renderer::StencilTest StencilTest;
		Renderer::DepthTest DepthTest;
		Renderer::DepthRange DepthRange;
		Renderer::Blending Blending;
		Renderer::ColorMask ColorMask;
		bool DepthMask;
	};
}